﻿using System;
using System.Data;
using System.Data.SqlClient;

namespace Module.QuanLyDuoc.HeThongNhapXuat
{
    public class PhieuNhapVatTu : DBInteractionBase
    {
        // Phiếu nhập vật tư
        public string MaPhieuNhap { get; set; }
        public string SoChungTu { get; set; }
        public DateTime? NgayChungTu { get; set; }
        public string MaKho { get; set; }
        public int MaNhaCungCap { get; set; }
        public DateTime NgayGiao { get; set; }
        public string NguoiGiao { get; set; }
        public string NguoiNhan { get; set; }
        public string MaNguoiXetDuyet { get; set; }
        public int Thue { get; set; }
        public string DienGiai { get; set; }
        public int IsXetDuyet { get; set; }
        public string NguoiTao { get; set; }
        // Phiếu nhập vật tư chi tiết
        public string ID { get; set; }
        public string MaVatTu { get; set; }
        public string MaDonVi { get; set; }
        public int SoLuong { get; set; }
        public double DonGia { get; set; }
        public double DonGiaXuatDV { get; set; }
        public double DonGiaXuatBH { get; set; }
        public double PhanTramBHThanhToan { get; set; }
        public string DoiTuongBH { get; set; }
        public double ThanhTien { get; set; }
        public int NguonGocXuatXu { get; set; }
        public string LoSanXuat { get; set; }
        public DateTime NgaySanXuat { get; set; }
        public DateTime HanSuDung { get; set; }
        public int IsSuDung { get; set; }

        public bool PhieuNhapVatTu_Insert(PhieuNhapVatTu obj)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_Insert", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap_Output", SqlDbType.VarChar)
                    {
                        Direction = ParameterDirection.Output,
                        Size = 50
                    });
                    dbcmd.Parameters.Add(new SqlParameter("@SoChungTu", obj.SoChungTu));
                    dbcmd.Parameters.Add(new SqlParameter("@NgayChungTu", obj.NgayChungTu));
                    dbcmd.Parameters.Add(new SqlParameter("@MaKho", obj.MaKho));
                    dbcmd.Parameters.Add(new SqlParameter("@MaNhaCungCap", obj.MaNhaCungCap));
                    dbcmd.Parameters.Add(new SqlParameter("@NgayGiao", obj.NgayGiao));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiGiao", obj.NguoiGiao));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiNhan", obj.NguoiNhan));
                    dbcmd.Parameters.Add(new SqlParameter("@Thue", obj.Thue));
                    dbcmd.Parameters.Add(new SqlParameter("@DienGiai", obj.DienGiai));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiTao", obj.NguoiTao));
                    dbcmd.ExecuteNonQuery();
                    obj.MaPhieuNhap = dbcmd.Parameters["@MaPhieuNhap_Output"].Value.ToString();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool PhieuNhapVatTu_Update(PhieuNhapVatTu obj)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_Update", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", obj.MaPhieuNhap));
                    dbcmd.Parameters.Add(new SqlParameter("@SoChungTu", obj.SoChungTu));
                    dbcmd.Parameters.Add(new SqlParameter("@NgayChungTu", obj.NgayChungTu));
                    dbcmd.Parameters.Add(new SqlParameter("@MaKho", obj.MaKho));
                    dbcmd.Parameters.Add(new SqlParameter("@MaNhaCungCap", obj.MaNhaCungCap));
                    dbcmd.Parameters.Add(new SqlParameter("@NgayGiao", obj.NgayGiao));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiGiao", obj.NguoiGiao));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiNhan", obj.NguoiNhan));
                    dbcmd.Parameters.Add(new SqlParameter("@Thue", obj.Thue));
                    dbcmd.Parameters.Add(new SqlParameter("@DienGiai", obj.DienGiai));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiTao", obj.NguoiTao));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool PhieuNhapVatTu_Delete(string id)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_Delete", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", id));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool PhieuNhapVatTu_UpdateDuyetPhieu(string maphieunhap, string manguoixetduyet, int isxetduyet, string ghichu)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_UpdateDuyetPhieu", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", maphieunhap));
                    dbcmd.Parameters.Add(new SqlParameter("@MaNguoiXetDuyet", manguoixetduyet));
                    dbcmd.Parameters.Add(new SqlParameter("@IsXetDuyet", isxetduyet));
                    dbcmd.Parameters.Add(new SqlParameter("@GhiChu", ghichu));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public DataTable PhieuNhapVatTu_SelectById(string id)
        {
            var dt = new DataSet();
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_SelectById", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", id));
                    var dtAdapter = new SqlDataAdapter(dbcmd);
                    dtAdapter.Fill(dt);
                    return dt.Tables[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("tbDuoc_PhieuNhapVatTu_SelectById: " + ex.Message);
            }
        }

        public DataTable PhieuNhapVatTu_SelectAll(DateTime tungay, DateTime denngay, string makho, int pageindex, int pagesize, out int recordcount)
        {
            var dt = new DataSet();
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_SelectAll", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@TuNgay", tungay));
                    dbcmd.Parameters.Add(new SqlParameter("@DenNgay", denngay));
                    dbcmd.Parameters.Add(new SqlParameter("@MaKho", makho));
                    dbcmd.Parameters.Add(new SqlParameter("@PageIndex", pageindex));
                    dbcmd.Parameters.Add(new SqlParameter("@PageSize", pagesize));
                    dbcmd.Parameters.Add(new SqlParameter("@RecordCount", SqlDbType.Int, 50)
                    {
                        Direction = ParameterDirection.Output
                    });
                    var dtAdapter = new SqlDataAdapter(dbcmd);
                    dtAdapter.Fill(dt);
                    recordcount = Convert.ToInt32(dbcmd.Parameters["@RecordCount"].Value);
                    return dt.Tables[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("tbDuoc_PhieuNhapVatTu_SelectAll: " + ex.Message);
            }
        }

        public DataSet PhieuNhapVatTu_InPhieu(string maphieunhap)
        {
            var dt = new DataSet();
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_InPhieu", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", maphieunhap));
                    var dtAdapter = new SqlDataAdapter(dbcmd);
                    dtAdapter.Fill(dt);
                    return dt;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("tbDuoc_PhieuNhapVatTu_InPhieu: " + ex.Message);
            }
        }

        public bool PhieuNhapVatTu_ChiTiet_Insert(PhieuNhapVatTu obj)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_Insert", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", obj.MaPhieuNhap));
                    dbcmd.Parameters.Add(new SqlParameter("@MaVatTu", obj.MaVatTu));
                    dbcmd.Parameters.Add(new SqlParameter("@MaDonVi", obj.MaDonVi));
                    dbcmd.Parameters.Add(new SqlParameter("@SoLuong", obj.SoLuong));
                    dbcmd.Parameters.Add(new SqlParameter("@DonGia", obj.DonGia));
                    dbcmd.Parameters.Add(new SqlParameter("@NguonGocXuatXu", obj.NguonGocXuatXu));
                    dbcmd.Parameters.Add(new SqlParameter("@LoSanXuat", obj.LoSanXuat));
                    dbcmd.Parameters.Add(new SqlParameter("@NgaySanXuat", obj.NgaySanXuat));
                    dbcmd.Parameters.Add(new SqlParameter("@HanSuDung", obj.HanSuDung));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiTao", obj.NguoiTao));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool PhieuNhapVatTu_ChiTiet_Update(PhieuNhapVatTu obj)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_Update", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@ID", obj.ID));
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", obj.MaPhieuNhap));
                    dbcmd.Parameters.Add(new SqlParameter("@MaVatTu", obj.MaVatTu));
                    dbcmd.Parameters.Add(new SqlParameter("@MaDonVi", obj.MaDonVi));
                    dbcmd.Parameters.Add(new SqlParameter("@SoLuong", obj.SoLuong));
                    dbcmd.Parameters.Add(new SqlParameter("@DonGia", obj.DonGia));
                    dbcmd.Parameters.Add(new SqlParameter("@NguonGocXuatXu", obj.NguonGocXuatXu));
                    dbcmd.Parameters.Add(new SqlParameter("@LoSanXuat", obj.LoSanXuat));
                    dbcmd.Parameters.Add(new SqlParameter("@NgaySanXuat", obj.NgaySanXuat));
                    dbcmd.Parameters.Add(new SqlParameter("@HanSuDung", obj.HanSuDung));
                    dbcmd.Parameters.Add(new SqlParameter("@NguoiTao", obj.NguoiTao));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool PhieuNhapVatTu_ChiTiet_Delete(string id)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_Delete", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@ID", id));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public DataTable PhieuNhapVatTu_ChiTiet_SelectById(string id)
        {
            var dt = new DataSet();
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_SelectById", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@ID", id));
                    var dtAdapter = new SqlDataAdapter(dbcmd);
                    dtAdapter.Fill(dt);
                    return dt.Tables[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("tbDuoc_PhieuNhapVatTu_ChiTiet_SelectById: " + ex.Message);
            }
        }

        public DataTable PhieuNhapVatTu_ChiTiet_SelectByMaPhieuNhap(string maphieunhap, string textsearch, int offset, int limit, out int total)
        {
            var dt = new DataSet();
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_SelectByMaPhieuNhap", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@MaPhieuNhap", maphieunhap));
                    dbcmd.Parameters.Add(new SqlParameter("@TextSearch", textsearch));
                    dbcmd.Parameters.Add(new SqlParameter("@Offset", offset));
                    dbcmd.Parameters.Add(new SqlParameter("@Limit", limit));
                    dbcmd.Parameters.Add(new SqlParameter("@Total", SqlDbType.Int, 50)
                    {
                        Direction = ParameterDirection.Output
                    });
                    var dtAdapter = new SqlDataAdapter(dbcmd);
                    dtAdapter.Fill(dt);
                    total = Convert.ToInt32(dbcmd.Parameters["@Total"].Value);
                    return dt.Tables[0];
                }
            }
            catch (Exception ex)
            {
                throw new Exception("tbDuoc_PhieuNhapVatTu_ChiTiet_SelectByMaPhieuNhap: " + ex.Message);
            }
        }

        public bool PhieuNhapVatTu_ChiTiet_UpdateDonGia_TinhTrang(PhieuNhapVatTu obj)
        {
            try
            {
                using (var dbcmd = new SqlCommand("tbDuoc_PhieuNhapVatTu_ChiTiet_UpdateDonGia_TinhTrang", GetConnection()))
                {
                    dbcmd.CommandType = CommandType.StoredProcedure;
                    dbcmd.Parameters.Add(new SqlParameter("@ID", obj.ID));
                    dbcmd.Parameters.Add(new SqlParameter("@DonGiaXuatDV", obj.DonGiaXuatDV));
                    dbcmd.Parameters.Add(new SqlParameter("@DonGiaXuatBH", obj.DonGiaXuatBH));
                    dbcmd.Parameters.Add(new SqlParameter("@PhanTramBHThanhToan", obj.PhanTramBHThanhToan));
                    dbcmd.Parameters.Add(new SqlParameter("@DoiTuongBH", obj.DoiTuongBH));
                    dbcmd.Parameters.Add(new SqlParameter("@IsSuDung", obj.IsSuDung));
                    dbcmd.ExecuteNonQuery();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }
}